Many current grid computing systems are designed to allow multiple interconnected computers, or nodes or clients, to work together on large grid applications, such as computational problems, that would be impossible to do on a single machine. This type of shared processing of grid applications is possible in part because of the enforced or incidental idle processor time of many personal and business computers. In order to feasibly manage such overwhelming amounts of computational processing, a computational problem may be divided into several smaller, more manageable jobs, which is then distributed or scattered among the various computers throughout one or more grid computing systems for processing. As such, grid computing systems may allow for shared storage across a plurality of nodes within the system. In this way, data may be stored remotely on the system, in the form of a backup, for example, and allow large amounts of data to be virtually stored by a single node. With various disparate storage, memory, and processing resources available from the many nodes in a grid computing system, it has become imperative that such grid systems are designed so that the sharing of storage, memory, and processing resources utilized for backing up and restoring of data in a grid computing system is conducted in an organized and efficient manner that is not cost-prohibitive nor requires the implementation of a central controller that maintains critical information regarding distributed data in the grid computing system. Further, there is a need for such grid computing systems to be autonomic and to take into account the dynamic nature of grid computing, in which many resources may be dynamically allocated, reclaimed, reserved and or not available. Furthermore, there is a need for dramatically reducing costs of such backup and restore when restoration of 100% of the data is not critical.